package com.ydl.controller;

import com.ydl.common.util.ResultVo;
import com.ydl.dao.UserDao;
import com.ydl.entry.dto.PermissionDto;
import com.ydl.entry.dto.UserDto;
import com.ydl.entry.pojo.Role;
import com.ydl.entry.vo.user.*;
import com.ydl.service.UserService;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

//定义地址，不和其他控制器重名
@RequestMapping("/user")
@RestController
@CrossOrigin
public class UserController {


    //      自动注入,表示是一个Service层
    @Autowired
    private UserService userService;

    //        获取用户的角色 get表示调用方式
//        post方法,传递的信息放在body的请求体里面，更加安全，且能传输一些json的数据，更加便捷，后期都用
//        @RequestBody 表示传入参数是json类型，下是json类型数据
//        {     "id":"1"
//              "name":"张三"
//              "age":"15"
//        }
//        UserDto一些传入进行选择的数据，类似查询时使用的
//        @RequestBody UserDto userDto 为前端传入的参数

//    public ResultVo getRole(@RequestBody UserDto userDto) {
//
//        Role role = userService.getRole(userDto);
//        return ResultVo.success("查询成功", role);
//    }

    //
    @PostMapping("/login")
    public ResultVo login(@RequestBody LoginParam loginParam) {
        return userService.login(loginParam);
    }

    /**
     * 查询用户列表
     * @return
     */
    @PostMapping("user_list")
    public ResultVo userList(@RequestBody QueryUserParam queryUserParam) {
        return userService.userList(queryUserParam);
    }

    @GetMapping("output")
    public ResultVo output() throws FileNotFoundException {
        return userService.output();
    }

    @PostMapping("file-input")
    public ResultVo fileInput(MultipartFile file) throws IOException {
        return userService.fileInput(file);
    }


    @PostMapping("deleteUser")
    public ResultVo deleteUser(@RequestBody DeleteUserParam deleteUserParam) {
        return userService.deleteUser(deleteUserParam);
    }

    @PostMapping("updateUser")
    public ResultVo updateUser(@RequestBody UpdateUserParam updateUserParam) {
        return userService.updateUser(updateUserParam);
    }

    @PostMapping("add")
    public ResultVo addUser(@RequestBody AddUserParam addUserParam) {
        return userService.addUser(addUserParam);
    }

    @PostMapping("logout")
    public ResultVo logout() {
        return userService.logout();
    }
}
